<?php
/**
 * 模拟数据生成器
 */
namespace app\controller\applets;
use app\controller\applets\BaseController;
use think\Request;
use app\service\IndexService;


class Mock extends BaseController{

	private $indexService;



    public function __construct() {
		$this->indexService=new IndexService();

    }

    //生成一条数据
	public function queryData(Request $input){

		$dataParam=$input->param('data','');

		return $this->return_succ(['data'=>$this->getDataRow($dataParam)]);

	}
    //生成列表数据
	public function listData(Request $input){
		$limit=$input->param('limit',5);
		$page=$input->param('page',1);
		$dataParam=$input->param('data','');

		$generateData=[];
		for ($i=0; $i < $limit; $i++) { 
			$generateData[]=$this->getDataRow($dataParam);
		}

		$data=[
			'current_page'=>1,
			'data'=>$generateData,
			'first_page_url'=>'https://dctapi.chinalao.com/api/jobs/index?=1',
			'from'=>1,
			'last_page'=>28,
			'last_page_url'=>'https://dctapi.chinalao.com/api/jobs/index?=28',
			'next_page_url'=>'https://dctapi.chinalao.com/api/jobs/index?=2',
			"path"=>"https://dctapi.chinalao.com/api/jobs/index",
			"per_page"=>"10",
			"prev_page_url"=>null,
			"to"=>10,
			"total"=>274,
		];
		return $this->return_succ(['data'=>$data]);

	}
	
	public function updateData(Request $input){

		$dataParam=$input->param('data','');
		$param=$input->except(['data']);
		if(count($param)==0){
			return $this->return_succ(['result'=>false,'msg'=>'请输入参数','data'=>'']);
		}
		$resultParam=$this->isDataRow($dataParam);
		foreach ($resultParam as $key => $value) {
			if(!isset($param[$key])){
				return $this->return_succ(['result'=>false,'msg'=>'缺少参数'.$key,'data'=>'']);
			}
			if(empty($param[$key])){
				return $this->return_succ(['result'=>false,'msg'=>'参数'.$key.'不能为空','data'=>'']);
			}
		}

		return $this->return_succ();

	}
	private function return_succ($param=''){
		$result=true;
		$msg="成功";
		$data=[];
        if(is_array($param)){
            $flag = true;
            if (array_key_exists('result', $param)) {
                $result = $param['result'];
                $flag       = false;
            }
            if (array_key_exists('msg', $param)) {
                $msg = $param['msg'];
                $flag       = false;
            }
            if (array_key_exists('data', $param)) {
                $data = $param['data'];
            }else{
                if ($flag) {
                    $data = $param;
                }
            }
        }else{
            $data = $param;
        }
		return json([
			"result"=>$result,
			"msg"=>$msg,
			"data"=>$data
		]);
	}
	private function getDataRow($data) {
		$dataRow=[];
		foreach ($data as $key => $value) {
			if($value=='string'){
				$dataRow[$key]=getRandStr(20);
			}else if($value=='number'){
				$dataRow[$key]=mt_rand(1,100);
			}else if($value=='status'){
				$dataRow[$key]=$this->generateRandomMobilePhone();
			}else if($value=='date'){
				$dataRow[$key]=date("Y-m-d");
			}else if($value=='datetime'){
				$dataRow[$key]=date("Y-m-d H:i:s");
			}else if($value=='mobile'){
				$dataRow[$key]=$this->generateRandomMobilePhone();
			}else if($value=='name'){
				$dataRow[$key]=$this->generateRandomChineseName();
			}else if($value=='companyname'){
				//公司名称
				$dataRow[$key]=$this->generateRandomCompanyName();
			}else if($value=='taskname'){
				//任务名称
				$dataRow[$key]=$this->generateRandomTaskName();
			}else if($value=='paymethod'){
				//支付方式
				$dataRow[$key]=$this->paymethod();
			}else if($value=='email'){
				//email
				$dataRow[$key]=$this->generateRandomEmail();
			}else if($value=='float'){
				//浮点数
				$dataRow[$key]=$this->generateRandomFloatWithRand();
			}else{
				$dataRow[$key]=$value;
			}
		}
	    return $dataRow;
	}
	private function isDataRow($data) {
		$dataRow=[];
		foreach ($data as $key => $value) {
			$dataRow[$key]=$value;
		}
	    return $dataRow;
	}
	//生成随机中文公司名称
	private function generateRandomCompanyName() {
	    // 一些常见的公司名称关键词
	    $companyKeywords = array('科技', '贸易', '文化', '传媒', '电子', '实业', '有限', '集团');
	    // 行业类别关键词
	    $industryKeywords = array('软件', '服装', '餐饮', '汽车', '金融', '建筑', '教育', '医疗');

	    // 随机选择公司关键词和行业关键词
	    $companyKeyword = $companyKeywords[array_rand($companyKeywords)];
	    $industryKeyword = $industryKeywords[array_rand($industryKeywords)];

	    // 生成公司字号部分，2 - 4 个汉字
	    $companyNamePart = '';
	    $nameLength = rand(2, 4);
	    for ($i = 0; $i < $nameLength; $i++) {
	        $randomUnicode = rand(0x4e00, 0x9fff);
	        $companyNamePart.= mb_convert_encoding(pack('N', $randomUnicode), 'UTF-8', 'UCS-4BE');
	    }

	    return $companyNamePart. $companyKeyword. $industryKeyword;
	}
	//生成随机中文任务名称
	private function generateRandomTaskName() {
	    // 任务类型关键词
	    $taskTypeKeywords = array('调研', '开发', '测试', '推广', '审核', '优化');
	    // 任务对象关键词
	    $taskObjectKeywords = array('项目', '产品', '方案', '系统', '数据');

	    // 随机选择任务类型和任务对象关键词
	    $taskTypeKeyword = $taskTypeKeywords[array_rand($taskTypeKeywords)];
	    $taskObjectKeyword = $taskObjectKeywords[array_rand($taskObjectKeywords)];

	    // 生成任务描述部分，3 - 5 个汉字
	    $taskDescriptionPart = '';
	    $nameLength = rand(3, 5);
	    for ($i = 0; $i < $nameLength; $i++) {
	        $randomUnicode = rand(0x4e00, 0x9fff);
	        $taskDescriptionPart.= mb_convert_encoding(pack('N', $randomUnicode), 'UTF-8', 'UCS-4BE');
	    }

	    return $taskTypeKeyword. $taskObjectKeyword. $taskDescriptionPart;
	}
	//生成随机中文订单名称
	private function generateRandomOrderName() {
	    // 订单类型关键词
	    $orderTypeKeywords = array('采购', '销售', '定制', '服务');
	    // 商品或服务关键词
	    $productServiceKeywords = array('商品', '设备', '课程', '套餐', '咨询');

	    // 随机选择订单类型和商品服务关键词
	    $orderTypeKeyword = $orderTypeKeywords[array_rand($orderTypeKeywords)];
	    $productServiceKeyword = $productServiceKeywords[array_rand($productServiceKeywords)];

	    // 生成订单编号部分，4 位数字
	    $orderNumberPart = sprintf('%04d', rand(1000, 9999));

	    return $orderTypeKeyword. $productServiceKeyword. $orderNumberPart;
	}
	//随机生成中文姓名
	private function generateRandomChineseName(){
	    // 姓氏数组，可根据实际情况扩充
	    $surnames = array('赵', '钱', '孙', '李', '周', '吴', '郑', '王', '冯', '陈');

	    // 随机选取一个姓氏
	    $surname = $surnames[array_rand($surnames)];

	    // 确定名字的字数，这里随机为 1 到 2 个字
	    $nameLength = rand(1, 2);
	    $name = '';

	    // 生成名字部分
	    for ($i = 0; $i < $nameLength; $i++) {
	        // 汉字的 Unicode 编码范围是 0x4e00 到 0x9fff
	        $randomUnicode = rand(0x4e00, 0x9fff);
	        $name.= mb_convert_encoding(pack('N', $randomUnicode), 'UTF-8', 'UCS-4BE');
	    }

	    return $surname. $name;
	}

	//随机生成状态
	private function generateRandomStatus($stats=1,$end=2){
	    return mt_rand($stats,$end);
	}

	//随机生成手机号
	private function generateRandomMobilePhone($stats=1,$end=2){
	    // 手机号码段，可根据实际情况扩充，这里列举一些常见的
	    $phonePrefixes = array('130', '131', '132', '133', '134', '135', '136', '137', '138', '139', 
	                           '145', '147', '149', '150', '151', '152', '153', '155', '156', '157', 
	                           '158', '159', '166', '170', '171', '172', '173', '174', '175', '176', 
	                           '177', '178', '180', '181', '182', '183', '184', '185', '186', '187', 
	                           '188', '189', '191', '198', '199');
	    // 随机选择一个号码段
	    $prefix = $phonePrefixes[array_rand($phonePrefixes)];
	    // 生成后面8位随机数字
	    $suffix = sprintf('%08d', rand(0, 99999999));
	    return $prefix. $suffix;
	}
	//支付方式
	private function paymethod(){
	    $payArr=["微信","支付宝","现金","银行卡","微信转账","支付宝转账","红包"];
	    return $payArr[mt_rand(0,6)];
	}
	//email
	private function generateRandomEmail(){
	    // 定义一些常见的邮箱域名后缀
	    $emailDomains = array('gmail.com', 'yahoo.com', 'hotmail.com', 'outlook.com', '163.com', 'qq.com');
	    // 生成随机用户名部分，这里简单生成 5 - 10 个字符的随机字符串
	    $username = '';
	    $usernameLength = rand(5, 10);
	    for ($i = 0; $i < $usernameLength; $i++) {
	        // 可以使用字母和数字组合来生成更真实的用户名，这里仅使用小写字母示例
	        $username.= chr(rand(97, 122)); 
	    }
	    // 随机选择一个邮箱域名后缀
	    $domain = $emailDomains[array_rand($emailDomains)];
	    return $username. '@'. $domain;
	}
	// 随机浮点数
	private function generateRandomFloatWithRand() {
	    return rand(0, 1000) / 1000;
	}





}
